home *** CD-ROM | disk | FTP | other *** search
/ Belgian Amiga Club - ADF Collection / BS1 part 26.zip / BS1 part 26 / Macro assembler dev syst.adf / include / exec / lists.i < prev    next >
Text File  |  1985-12-20  |  3KB  |  145 lines

  1.     IFND EXEC_LISTS_I
  2. EXEC_LISTS_I SET 1
  3. **********************************************************************
  4. *
  5. * Commodore-Amiga, Inc. -- ROM Operating System Executive Include File
  6. *
  7. **********************************************************************
  8. *
  9. *   Source Control:
  10. *
  11. *  $Header: lists.i,v 1.1 85/09/06 15:49:56 carl Exp $
  12. *
  13. *  $Locker:  $
  14. *
  15. **********************************************************************
  16.  
  17.     IFND EXEC_NODES_I
  18.     INCLUDE "exec/nodes.i"
  19.     ENDC !EXEC_NODES_I
  20.  
  21.  
  22. *---------------------------------------------------------------------
  23. *
  24. *   List Structures
  25. *
  26. *---------------------------------------------------------------------
  27.  
  28.  STRUCTURE  LH,0
  29.     APTR    LH_HEAD
  30.     APTR    LH_TAIL
  31.     APTR    LH_TAILPRED
  32.     UBYTE   LH_TYPE
  33.     UBYTE   LH_pad
  34.     LABEL   LH_SIZE
  35.  
  36.  
  37. NEWLIST      MACRO   * list
  38.           MOVE.L  \1,(\1)
  39.           ADDQ.L  #LH_TAIL,(\1)
  40.           CLR.L   LH_TAIL(\1)
  41.           MOVE.L  \1,(LH_TAIL+LN_PRED)(\1)
  42.           ENDM
  43.  
  44. TSTLIST      MACRO   * [list]
  45.        IFC      '\1',''
  46.           CMP.L   LH_TAIL+LN_PRED(A0),A0
  47.        ENDC
  48.        IFNC    '\1',''
  49.           CMP.L   LH_TAIL+LN_PRED(\1),\1
  50.        ENDC
  51.        ENDM
  52.  
  53. SUCC         MACRO   * node,succ
  54.           MOVE.L  (\1),\2
  55.        ENDM
  56.  
  57. PRED         MACRO   * node,pred
  58.           MOVE.L  LN_PRED(\1),\2
  59.        ENDM
  60.  
  61. IFEMPTY      MACRO   * list,label
  62.           CMP.L   LH_TAIL+LN_PRED(\1),\1
  63.           BEQ     \2
  64.        ENDM
  65.  
  66. IFNOTEMPTY  MACRO   * list,label
  67.           CMP.L   LH_TAIL+LN_PRED(\1),\1
  68.           BNE     \2
  69.        ENDM
  70.  
  71. TSTNODE     MACRO   * node,next
  72.           MOVE.L  (\1),\2
  73.           TST.L   (\2)
  74.        ENDM
  75.  
  76. NEXTNODE    MACRO   * next,current,exit_label (DX,AX,DISP16)
  77.           MOVE.L  \1,\2
  78.           MOVE.L  (\2),\1
  79.           BEQ     \3
  80.        ENDM
  81.  
  82. ADDHEAD      MACRO
  83.           MOVE.L  (A0),D0
  84.           MOVE.L  A1,(A0)
  85.           MOVEM.L D0/A0,(A1)
  86.           MOVE.L  D0,A0
  87.           MOVE.L  A1,LN_PRED(A0)
  88.        ENDM
  89.  
  90. ADDTAIL      MACRO
  91.           LEA      LH_TAIL(A0),A0
  92.           MOVE.L  LN_PRED(A0),D0
  93.           MOVE.L  A1,LN_PRED(A0)
  94.           MOVE.L  A0,(A1)
  95.           MOVE.L  D0,LN_PRED(A1)
  96.           MOVE.L  D0,A0
  97.           MOVE.L  A1,(A0)
  98.        ENDM
  99.  
  100. REMOVE       MACRO
  101.           MOVE.L  (A1),A0
  102.           MOVE.L  LN_PRED(A1),A1
  103.           MOVE.L  A0,(A1)
  104.           MOVE.L  A1,LN_PRED(A0)
  105.        ENDM
  106.  
  107. REMHEAD      MACRO
  108.           MOVE.L  (A0),A1
  109.           MOVE.L  (A1),D0
  110.           BEQ.S   REMHEAD\@
  111.           MOVE.L  D0,(A0)
  112.           EXG.L   D0,A1
  113.           MOVE.L  A0,LN_PRED(A1)
  114. REMHEAD\@
  115.        ENDM
  116.  
  117. *----------------------------------------------------------------
  118. *
  119. *  REMHEADQ -- remove-head quickly
  120. *
  121. *  Useful when a scratch register is available, and
  122. *  list is known to contain at least one node.
  123. *
  124. *----------------------------------------------------------------
  125.  
  126. REMHEADQ    MACRO   * head,node,scratchReg
  127.           MOVE.L  (\1),\2
  128.           MOVE.L  (\2),\3
  129.           MOVE.L  \3,(\1)
  130.           MOVE.L  \1,LN_PRED(\3)
  131.        ENDM
  132.  
  133. REMTAIL      MACRO
  134.           MOVE.L  LH_TAIL+LN_PRED(A0),A1
  135.           MOVE.L  LN_PRED(A1),D0
  136.           BEQ.S   REMTAIL\@
  137.           MOVE.L  D0,LH_TAIL+LN_PRED(A0)
  138.           EXG.L   D0,A1
  139.           MOVE.L  A0,(A1)
  140.           ADDQ.L  #4,(A1)
  141. REMTAIL\@
  142.        ENDM
  143.  
  144.     ENDC !EXEC_LISTS_I
  145.